雖然我知道知識庫有備份。資料放在雲端,家中的電腦會定期把資料庫抓回來,C 槽和 D 槽各留一份。
但我後來想確認的,不只是家裡有沒有備份檔。如果雲端主機出了問題,我拿著那些檔案,能不能把整份知識庫找回來?我可以接受最近幾個小時,必要時半天左右的資料有異狀;已經存下來的內容,還是希望盡量不要漏。
這次沒有真的發生資料遺失。我只是開始擔心備份範圍夠不夠,所以請 AI 協助我查看目前的排程、備份檔和知識庫存檔的方式。
目前是家中的電腦透過私有網路,定期從雲端主機複製資料庫。
雲端和家中是兩個地方,所以這應該算是一份資料庫的異地副本吧?
查核時,排程最近一次執行成功,C、D 兩處也都有備份檔。
檔案能打開,資料庫檢查沒有報錯;條目、摘要、標籤、關聯和向量資料都能查到。
當時拿備份檔與正式主機的資料庫主檔比對,結果也相同。
我至少知道,家中的備份不是一個只有檔名、內容卻讀不出來的檔案。
不過這次做的是檔案檢查與比對,還不是把知識庫從備份重新架起來。
另外,C 槽和 D 槽雖然各有一份,兩者仍在同一台家中電腦上。它們是雲端資料庫在家中的副本,不是兩個分處不同地點的備份點。
我原本看到的是「每小時執行備份」。看腳本後才知道,檔名是依日期產生的:同一天再次執行時,會更新當天那份檔案。手上可以往回找不同日期的版本,但不能從今天的檔案中任選上午、下午各個時間點。
這在雲端主機整個無法使用時,和想找回「某次修改之前的內容」時,影響不一樣。前者看的是最近一次副本留下了多少;後者還得看想要的舊內容,有沒有留在某個尚未被更新的版本裡。
夜間有一段時間沒有新備份紀錄,原因我知道。這篇先把它如實記下;我比較想往下查的是:即使某次備份成功了,那份檔案到底包含哪些資料?
繼續查下去,我發現知識庫把兩種東西放在不同地方。條目文字、摘要、標籤和關聯在資料庫裡;我上傳的原始檔案,則存在主機的上傳資料夾。資料庫會記錄檔案的位置,但不等於把整份原檔裝進資料庫。
目前的備份腳本只複製資料庫,沒有複製上傳資料夾。這次查核時,正式主機上的原檔仍在,沒有遺失。但假如將來只剩家中的備份,我能找回條目中保留的文字,卻無法從那份備份拿回上傳時的完整原檔。
這兩者對我來說不能直接畫上等號。從檔案擷取出的內容可以拿來搜尋、整理;原檔則保留了我當時上傳的整份資料。我如果想回頭確認原來寫了什麼,不能只因為搜尋得到幾段文字,就認為原檔也保住了。

現有備份流程。雲端知識庫分成資料庫與上傳的原始附件;目前只有資料庫被複製到家中電腦。圖中標清楚「條目文字仍在備份中」與「原始附件未納入備份」。
還有一個我原先沒注意到的地方:資料庫中有四筆條目記著舊的附件路徑。它們對應的原檔仍在正式主機的上傳資料夾,但照目前程式記錄的路徑去找,會找不到檔案。這不是原檔已經遺失,而是條目指向的位置沒有跟著目前存放的位置調整。就算之後把附件加入備份,也得一起處理這些路徑,才有辦法在還原後正常取回原檔。
我回頭想,當初使用知識庫時,可能主要存的是網址和文字。先替資料庫留副本,也許已經涵蓋那時大部分會用到的內容。不過這只是我現在的回想,沒有紀錄能證明當初是基於這個理由設計備份。檔案上傳功能當時就已存在,不能說成後來才加上去。
知識庫使用 SQLite。程式運作時,剛寫入的資料有時會先留在資料庫旁的另一個檔案;目前腳本則是直接複製資料庫主檔。這次比對沒有發現備份檔比當下的主檔少資料,但我不能靠一次比對,就認定往後每次複製都能取得完整一致的內容。
對我來說,還原也不只是把檔案放回原處。如果真的要從備份重新使用知識庫,我會想打開一筆熟悉的資料,確認原文和摘要還在、標籤及關聯仍對得上,也要能下載原始附件。這次尚未在隔離環境做過這整段操作,所以目前只能說資料庫備份可讀,不能說完整還原已經驗收。
這次我和 AI 討論後,先把幾件事記進待做任務:

依序呈現「一致的資料庫備份+原始附件」→「能在還原後找到檔案」→「隔離還原與實際查找」。這是與 AI 討論的改善方案,尚未實作或驗收,目前整理到待做項目中。
我想先把保護的範圍補齊,再確認備份拿出來時真的能用。
至於夜間備份的空窗和要保留多少版本,也會跟著一起調整;目前不能把這些討論中的做法寫成已經完成。
這次查完,我比較清楚家中那份檔案的用途:它保留了知識庫的資料庫,而且這次檢查時內容可讀;我在意的原始附件,還沒有被它一起帶走。接下來要確認的,就是怎麼把兩者一同保存,也能在需要時一同找回來。
一路使用下來,我記下的不只是一個備份問題。有些是測試時發現的缺口,有些是我希望增加的功能;這份清單不能當成「全部都已確認故障」。
